package com.chenjun.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonUtils {
	
	/**
	 * 
	 * @Description : Object转Map
	 * @param
	 * @return
	 * @author lcc
	 */
	public static List<Map<String, Object>> jsonToList(Object obj) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		List<?> jsonObjectList = reflect(JSONArray.fromObject(obj));
		for (Object object : jsonObjectList) {
			list.add(jsonToMap(JSONObject.fromObject(object)));
		}

		return list;
	}

	/**
	 * 
	 * @Description :JSONObject转Map
	 * @param
	 * @return
	 * @author lcc
	 */
	public static Map<String, Object> jsonToMap(JSONObject jsonObject) {
		Map<String, Object> map = new HashMap<String, Object>();
		Set<?> keys = jsonObject.keySet();
		for (Object key : keys) {
			Object o = jsonObject.get(key);
			if (o instanceof JSONArray)
				map.put((String) key, reflect((JSONArray) o));
			else if (o instanceof JSONObject)
				map.put((String) key, jsonToMap((JSONObject) o));
			else
				map.put((String) key, o);
		}
		return map;
	}

	/**
	 * 
	 * @Description : JSONObject转List
	 * @param json
	 * @return
	 * @author lcc
	 */
	public static List<?> reflect(JSONArray jsonArray) {
		List<Object> list = new ArrayList<Object>();
		for (Object o : jsonArray) {
			if (o instanceof JSONArray)
				list.add(reflect((JSONArray) o));
			else if (o instanceof JSONObject)
				list.add(jsonToMap((JSONObject) o));
			else
				list.add(o);
		}
		return list;
	}
}